/*
 * @lc app=leetcode.cn id=3 lang=java
 *
 * [3] 无重复字符的最长子串
 *
 * https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/
 *
 * algorithms
 * Medium (31.76%)
 * Likes:    2553
 * Dislikes: 0
 * Total Accepted:    243.8K
 * Total Submissions: 767.4K
 * Testcase Example:  '"abcabcbb"'
 *
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 *
 * 示例 1:
 *
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 *
 *
 * 示例 2:
 *
 * 输入: "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 *
 *
 * 示例 3:
 *
 * 输入: "pwwkew"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
 * 请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
 *
 *
 */

// @lc code=start
class Solution {
    public int lengthOfLongestSubstring(String s) {
        int res = 0, cur = 0;
        //指针遍历整个String
        for (int fast =  0, slow = 0; fast < s.length(); fast++) {
            char ch1 = s.charAt(fast);
            //初始长度为1
            cur = 1;
            for (int i = fast - cur;i >= slow ; i--) {
                char ch2 = s.charAt(i);
                //如果存在相等字符，子串的左边界需要收缩
                if (ch1 == ch2) {
                    slow = i + 1;
                    break;
                }
                //不存在则扩展右边界
                cur++;
            }
            //当前长度大与最大则替换
            if (cur > res) {
                res = cur;
            }
        }

        return res;
    }
}
// @lc code=end

